In [1]:
import os
import pandas as pd
import seaborn as sns
import plotly.express as px
import plotly.graph_objects as go
import matplotlib.pyplot as plt

from hbn.constants import Defaults
from hbn.visualization import visualize

import warnings
warnings.filterwarnings("ignore")

%load_ext autoreload
%autoreload 2
could not make /global/scratch/users/maedbhking/bin/pydra-ml/cache-wf/
In [2]:
# load model output

df_classify = pd.read_csv(os.path.join(Defaults.MODEL_DIR, 'classifier-all-phenotypic-models-performance.csv'))
df_regress = pd.read_csv(os.path.join(Defaults.MODEL_DIR, 'regression-all-phenotypic-models-performance.csv'))

for idx,col in enumerate(['Assessment', 'Domain', 'Measure']):
    df_classify[col] = df_classify['features'].str.split('-').str.get(idx)
In [3]:
# set plotting style
visualize.plotting_style()
In [4]:
def interactive_plot(df, x='features', y='roc_auc_score'):
    
    fig = go.Figure()

    fig.add_trace(go.Violin(x=df[x][df['data']=='model-data'],
                            y=df[y][df['data']=='model-data'],
                            legendgroup='Null', scalegroup='Null', name='Null',
                            side='negative',
                            line_color='blue')
                 )
    fig.add_trace(go.Violin(x=df[x][df['data']=='model-null'],
                            y=df[y][df['data']=='model-null'],
                            legendgroup='Data', scalegroup='Data', name='Data',
                            side='positive',
                            line_color='orange')
                 )
    fig.update_traces(meanline_visible=True, box_visible=False)
    fig.update_layout(violingap=0, violinmode='overlay')
    fig.update_xaxes(showticklabels=False)
    fig.update_yaxes(title_text=y)
    fig.show()
    
def stable_plot(df, x='features', y='roc_auc_score', hue='data'):
    ax = sns.violinplot(
        x=x, 
        y=y, 
        hue=hue, 
        data=df, 
        split=True,  
        scale='width',
        inner='quartile'
        )
    ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.1),
              ncol=2, fancybox=True, shadow=True)
    plt.xticks(rotation=90)
    plt.show()
In [5]:
# Child Measures - Language Tasks

df1 = df_classify[(df_classify['target']=='DX_01_Cat_binarize') & 
                  (df_classify['Assessment']=='Child_Measures') & 
                  (df_classify['Domain']=='Language_Tasks')]


interactive_plot(df=df1)
In [6]:
# Parent Measures - Demographics

df1 = df_classify[(df_classify['target']=='DX_01_Cat_binarize') & 
                  (df_classify['Assessment']=='Parent_Measures') & 
                  (df_classify['Domain']=='Demographic_Questionnaire_Measures')]


interactive_plot(df=df1)
In [7]:
# Parent Measures - Interview of Emotional and Psychological Function

df1 = df_classify[(df_classify['target']=='DX_01_Cat_binarize') & 
                  (df_classify['Assessment']=='Parent_Measures') & 
                  (df_classify['Domain']=='Interview_of_Emotional_and_Psychological_Function')]


interactive_plot(df=df1)
In [8]:
# Child Measures - Cognitive Testing

df1 = df_classify[(df_classify['target']=='DX_01_Cat_binarize') & 
                  (df_classify['Assessment']=='Child_Measures') & 
                  (df_classify['Domain']=='Cognitive_Testing')]


interactive_plot(df=df1)
In [9]:
# Child Measures - Questionnaire_Measures_of_Emotional_and_Cognitive_Status

df1 = df_classify[(df_classify['target']=='DX_01_Cat_binarize') & 
                  (df_classify['Assessment']=='Child_Measures') & 
                  (df_classify['Domain']=='Questionnaire_Measures_of_Emotional_and_Cognitive_Status')]


interactive_plot(df=df1)
In [10]:
# Child Measures : all other domains

df1 = df_classify[(df_classify['target']=='DX_01_Cat_binarize') & 
                  (df_classify['Assessment']=='Child_Measures')]

cols = ['Physical_Fitness_and_Status', 'Neurologic_Function', 'Physiologic_Function', 'Vision', 'Motor_Skills']

df1 = df1[df1['Domain'].isin(cols)]

interactive_plot(df=df1)
In [ ]: